40行代码搞定女友日常问候微信机器人
前言
作为一个程序狗,有个女朋友不容易,关键是女朋友还有各种各样的要求,比如每天晚上12点说晚安,每个纪念日要记得。这可让程序员如何是好,要知道,晚上12点,对我们来说晚上才刚刚开始;纪念日对我们来说就是写完一个project的日子。
所以,对于女朋友提出的需求,作为程序员的我们,当然不能坐视不管了,我们要写个程序来搞定它。
环境
Python
效果
先看看效果,微信号会在每天设定的时间按时按点发问候语给设定好的另一个微信号,同时可以自动进行一些相应的计算并更新每一天的内容,内容方面,就要靠大家丰富的想象力啦,这里只是给个演示。至于为什么问候只持续到10月27日,嗯...,这就是一个尴尬的故事了。
技术原理
技术原理部分,说简单也很简单,都是利用python现成的库来实现的,所以代码量很少,只有区区40行。大概的过程就是先使用电脑登录接口登录个人微信,然后挂着微信,在电脑是进行定时和内容操作,并完成发送。下面先来看看使用到的几个包:
import itchat, timeimport datetime as dt
from apscheduler.schedulers.background import BackgroundScheduler
import random
上面引用的包里面,itchat和apscheduler是不自带的,所以需要我们自行安装,其中,itchat是微信网页端的相关接口包,apscheduler是python定时服务包。就安装过程也非常简单,在命令行中输入:
pip install itchatpip install apscheduler
main函数
首先我们需要登录我们的个人微信,然后才能利用网络接口进行相关的操作。在主函数中,我们在登录完成后首先获取当前时间,然后设定下一个问候时间为明天的零点,然后开启定时服务和微信服务。代码如下:
if __name__ == '__main__':itchat.auto_login(enableCmdQR=True) # 在命令行中展示二维码,默认展示的是图片二维码
# itchat.auto_login(hotReload=True) # 这个是方便调试用的,不用每一次跑程序都扫码
now = dt.datetime.now() # 获取当前时间
nextTickTime = now + dt.timedelta(days=1) #下一个问候时间为明天的现在
nextTickTime = nextTickTime.strftime("%Y-%m-%d 00:00:00") # 把下一个问候时间设定为明天的零点
my_scheduler(nextTickTime) # 启用定时操作
itchat.run() # 跑微信服务
这里我们需要注意一下,我们使用的定时服务是异步的,也就是说,微信服务和定时服务是不会相互阻塞的,这才能使我们既进行微信的相关操作,又能在定时操作中做一些其他的事情。
my_scheduler函数
接下来看看我们的定时操作都干了什么:
def my_scheduler(runTime):scheduler = BackgroundScheduler() # 生成对象
scheduler.add_job(tick, 'date', run_date=runTime) # 在指定的时间,只执行一次
scheduler.start()
可见,定时操作函数也非常简单,就是建立了一个后台定时对象,添加了一个定时任务,然后让它开始工作。这里重点在添加任务这一步,参数tick是一个函数,也就是添加的这个任务要干啥,runTime是这个任务的执行的时间。所以,scheduler好比是一个闹钟,到了时间就提醒tick函数开始执行了。
tick函数
最后,我们来看看tick函数,这个函数其实就是这整份代码的核心啦,直接看代码:
# 一些备选问候语greetList = ['快去睡觉别熬夜','好好找工作加油','注意身体多喝热水','想你了求自拍']
def tick():
users = itchat.search_friends(name=u'xxx') # 找到你女朋友的名称
userName = users[0]['UserName']
meetDate = dt.date(2015,9,29) # 这是你跟你女朋友相识的日期
now = dt.datetime.now() # 现在的时间
nowDate = dt.date.today() # 今天的日期
passDates = (nowDate-meetDate).days # 你跟你女朋友认识的天数
itchat.send(u'今天是我们认识第%d天,%s,晚安'%(passDates,random.sample(greetList,1)[0]),toUserName=userName) # 发送问候语给女朋友
nextTickTime = now + dt.timedelta(days=1)
nextTickTime = nextTickTime.strftime("%Y-%m-%d 00:00:00")
my_scheduler(nextTickTime) # 设定一个新的定时任务,明天零点准时问候
可以看到,即使是最核心的代码,不管是思想还是实现也都还挺简单的。先利用itchat的接口,找到女朋友的微信,然后根据你们认识的日期和今天的日期计算出认识的天数,发送即可。然后再调用定时函数来进行明天的任务,可以看到,这说白了就是个递归的操作。
尾巴
至此,这个小小的程序就写完了,40行代码搞定,每天准时问候女友。当然,只需要稍微一改,很容易就能变成了周年纪念日提醒,100天提醒等等。这个就靠大家发挥想象力啦!
所有源码都已经上传github,大家可查看,如果有什么需要改进也可联系本人。一起学习一起进步!!
本文代码获取方式:下图扫码关注公众号,在公众号中回复问候机器人即可~
Python爱好者社区历史文章大合集:
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
1.崔老师爬虫实战案例免费学习视频。
2.丘老师数据科学入门指导免费学习视频。
3.陈老师数据分析报告制作免费学习视频。
4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
5.丘老师Python网络爬虫实战免费学习视频。